#include <fcntl.h>
#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <termios.h>
#include <unistd.h>

int init_tty(int fd)
{
    // 1.获取串口原先配置
    struct termios old_cfg;
    memset(&old_cfg, 0, sizeof(old_cfg));
    if (tcgetattr(fd, &old_cfg) != 0)
    {
        perror("tcgetattr");
        return -1;
    }
    // 2.定义新的存放属性的结构体变量
    struct termios new_cfg;
    memset(&new_cfg, 0, sizeof(new_cfg));
    // 激活本地连接和接收使能
    new_cfg.c_cflag |= CLOCAL | CREAD;
    // 设置终端工作模式为原始模式
    cfmakeraw(&new_cfg);
    // 设置输入输出波特率
    cfsetispeed(&new_cfg, B9600);
    cfsetospeed(&new_cfg, B9600);
    // 设置数据位为8位
    new_cfg.c_cflag &= ~CSIZE; /* 用数据位掩码清空数据位设置 */
    new_cfg.c_cflag |= CS8;
    // 设置无奇偶校验
    new_cfg.c_cflag &= ~PARENB;
    // 设置停止位
    new_cfg.c_cflag &= ~CSTOPB; /* 将停止位设置为一个比特 */
    // 设置等待时间和最少接收数据
    new_cfg.c_cc[VTIME] = 0; // 一直阻塞
    new_cfg.c_cc[VMIN] = 1;  // 有数据就马上接收
    //用于清空输入/输出缓冲区
    tcflush(fd, TCIOFLUSH);
    // 设置立即生效
    if ((tcsetattr(fd, TCSANOW, &new_cfg)) != 0)
    {
        perror("tcsetattr");
        return -1;
    }

    return 0;
}

int main(int argc, char const *argv[])
{
    // 1.打开串口2
    int s_fd2 = open("/dev/ttySAC2", O_RDWR | O_NOCTTY);
    if (s_fd2 == -1)
    {
        perror("open sac2 error\n");
        return -1;
    }
    // 2.设置串口属性
    init_tty(s_fd2);

    while(1)
    {
        
    }

    return 0;
}
